package lu.med.praxiswahl.wahlumed.client.utilities;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;

import javax.swing.JPanel;

public class ImagePanel extends JPanel
{
    /**
     * 
     */
    private static final long serialVersionUID = 4759747663676158746L;
    /**
     * Speichert die Grafik, die in das Panel zu zeichnen ist.
     */
    private Image image;

    public ImagePanel(Image imageFile)
    {
	super();

	this.image = imageFile;
    }

    /**
     * L&auml;dt eine neue Grafik und ersetzt damit die alte.
     * 
     * @param imageFile
     *            Pfad zur Grafik
     */
    public void loadImage(String imageFile)
    {
	if (imageFile.equals(""))
	{
	    return;
	}
	image = null;
	image = getToolkit().getImage(imageFile);
	MediaTracker mt = new MediaTracker(this);
	mt.addImage(image, 0);
	try
	{
	    mt.waitForAll();
	}
	catch (InterruptedException ex)
	{
	}
	finally
	{
	    this.repaint();
	}
    }

    @Override
    public void paint(Graphics g)
    {
	super.paint(g);
	// Zeichnet das Bild
	if (image != null)
	{
	    double imageHeight, imageWidth, imagePosX, imagePosY;
	    imageWidth = image.getWidth(this);
	    imageHeight = image.getHeight(this);
	    if ((imageWidth != -1) && (imageHeight != -1))
	    {
		// Nur wenn kein Fehler vorliegt wird fortgefahren
		// Faktor, der bei der Skalierung beachtet werden muss
		if (imageWidth > imageHeight)
		{
		    // Benutzt die volle Breite
		    double fac = imageWidth / imageHeight;
		    imageWidth = this.getWidth();
		    imageHeight = (imageWidth / fac);
		    imagePosX = 0.0;
		    imagePosY = ((this.getHeight() / 2.0) - (imageHeight / 2));
		    g.drawImage(image, (int) imagePosX, (int) imagePosY,
			    (int) imageWidth, (int) imageHeight, this);
		}
		else
		{
		    // Benutzt die volle Hoehe
		    double fac = imageHeight / imageWidth;
		    imageHeight = this.getHeight();
		    imageWidth = (imageHeight / fac);
		    imagePosX = (this.getWidth() / 2) - (imageWidth / 2);
		    imagePosY = 0.0;
		    g.drawImage(image, (int) imagePosX, (int) imagePosY,
			    (int) imageWidth, (int) imageHeight, this);
		}
	    }
	}
    }
}
